package com.dazhao.animejaphome.home.model;

import android.app.Application;

import com.dazhao.animejaphome.config.MyApplication;
import com.dazhao.animejaphome.myRxBus.DeleteLocalEvent;
import com.dazhao.animejaphome.myRxBus.RxBus;
import com.dazhao.animejaphome.home.animeResMVP.MVP_Contract;

import java.io.File;
import java.util.ArrayList;

import io.reactivex.functions.Consumer;

/**
 * Created by zhao on 2017/12/25.
 */

public class AnimeResModel implements MVP_Contract.Model {
    ArrayList<String> data;

    @Override
    public ArrayList<String> getData() {
        if (data==null){
            data=getPhoneData();
        }
        return data;
    }


    @Override
    public void deleteLocal(int position) {
        File file=MyApplication.getContext().getExternalFilesDir("Res/"+data.get(position));
        deleteFile(file);
        data.remove(position);//同时删除本地数据
    }

    @Override
    public void setOnDeleteLocalEvent() {
        RxBus.getInstance().toFlowable().subscribe(new Consumer<Object>() {
            @Override
            public void accept(Object o) throws Exception {
                if(o instanceof DeleteLocalEvent){
                    int position=((DeleteLocalEvent) o).getPosition();
                    deleteLocal(position);
                }
            }
        });
    }

    @Override
    public void resetData() {
        for(int i =0;i<getPhoneData().size()-data.size();i++){//让两者拥有同等长度
            data.add("");
        }
        for(int i=0;i<getPhoneData().size();i++){//克隆值
            data.set(i,getPhoneData().get(i));
        }

    }

    //获得手机外部存储里已经存在的资源名列表
    private ArrayList<String> getPhoneData(){
        File json,jpg,mp4;
        ArrayList<String> arrayList=new ArrayList<>();

        Application context=MyApplication.getContext();//新加的有可能出错
        String path =context.getExternalFilesDir("Res").getAbsolutePath();
        File file=new File(path);
        File[] files=file.listFiles();//该目录下包含多个资源组的文件夹
        if(files!=null){//刚开始资源有可能为空，造成空指针错误
            for(File resName:files){
                if(resName.isDirectory()){//资源组应该是一个包含三个文件的文件夹
                    //若果该文件夹存在三个文件MP4，jpg，json
                    json=new File(resName.getAbsolutePath()+"/"+resName.getName()+".json");
                    jpg =new File(resName.getAbsolutePath()+"/"+resName.getName()+".jpg");
                    mp4 =new File(resName.getAbsolutePath()+"/"+resName.getName()+".mp4");
                    if(json.exists()&&jpg.exists()&&mp4.exists()){//则应该存入资源名到data
                        arrayList.add(resName.getName());
                    }else {
                        //暂时不处理,说明该文件夹下某些资源被用户删除
                    }
                }else {
                    //Res目录下有文件的情况
                }
            }
        }else {//资源为空的情况，应该提示用户下载

        }

        return arrayList;
    }

    //删除文件和文件夹，file是要删除的文件夹的所在位置
    private void deleteFile(File file) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                File f = files[i];
                deleteFile(f);
            }
            file.delete();//如要保留文件夹，只删除文件，请注释这行
        } else if (file.exists()) {
            file.delete();
        }
    }
}
